/*
 * tclass.h
 *
 *  Created on: Jan 24, 2016
 *      Author: root
 */

#ifndef FUNNY_SCHEME_CLASS_H
#define FUNNY_SCHEME_CLASS_H

#include "../ds/datastructure.h"

DEFINE_OPERATOR( define_class        );
DEFINE_OPERATOR( add_inheritance     );
DEFINE_OPERATOR( add_property        );
DEFINE_OPERATOR( add_method          );
DEFINE_OPERATOR( define_method       );
DEFINE_OPERATOR( is_a                );
DEFINE_OPERATOR( delete_property     );
DEFINE_OPERATOR( delete_method       );
DEFINE_OPERATOR( change_inheritance  );
INIT_OPERATORS( class );

void init_class_hierarchy(Scheme *sc);
Cell *make_class(Scheme *sc, char *className);
int inherit_from(Scheme *sc, const char *child, const char *parent);
int is_a(Scheme *sc, Cell *a, Cell *b);

#endif //FUNNY_SCHEME_CLASS_H
